﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Views.Grid;

namespace ThuPhiVeSinh
{
    public partial class frmNhanVien : DevExpress.XtraEditors.XtraForm
    {
        DataClasses_TPVSDataContext dc = new DataClasses_TPVSDataContext();
        Boolean saved = true;
        DialogResult result;

        public frmNhanVien()
        {
            InitializeComponent();
        }

        private void frmNhanVien_Load(object sender, EventArgs e)
        {
            var nv = dc.GetTable<Nhan_Vien>();
            gcNhanVien.DataSource = nv;
        }

        private void btLuu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                gvNhanVien.MoveLast();
                gvNhanVien.MoveFirst();
                dc.SubmitChanges();            
                //XtraMessageBox.Show("Đã lưu!","Lưu",MessageBoxButtons.OK,MessageBoxIcon.Information);
                saved = true;
                this.Text = this.Text.Substring(0, this.Text.Length - 1);
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Cannot insert duplicate key in object"))
	            {
                    saved = true;
                    XtraMessageBox.Show("Có lỗi trong quá trình lưu dữ liệu.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
	            }
                else
                {
                    throw;
                }
                
            }
        }

        private void btXoa_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (gvNhanVien.RowCount == 0)
            {
                XtraMessageBox.Show("Không có dữ liệu để xóa.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                result = XtraMessageBox.Show("Bạn có chắc muốn xóa?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
                if (result == DialogResult.Yes)
                {
                    int rowHandles = gvNhanVien.FocusedRowHandle;
                    try
                    {
                        Nhan_Vien nv = (Nhan_Vien)gvNhanVien.GetRow(rowHandles);
                        if (nv.Cap_Phats.Count > 0 || nv.Doanh_Bo_Thangs.Count > 0 || nv.Khach_Hangs.Count > 0 )
                        {
                            XtraMessageBox.Show("Không thể xóa!\nDữ liệu đang được sử dụng.", "Lỗi!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        }
                        else
                        {
                            //dc.Quan_Huyens.DeleteOnSubmit(qh);
                            gvNhanVien.DeleteRow(rowHandles);
                            saved = false;
                            if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
                            {
                                this.Text = this.Text + "*";
                            }
                        }
                        
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                    
                }
            }
            
        }
                        
        private void frmNhanVien_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (saved == false)
            {
                result = XtraMessageBox.Show("Dữ liệu chưa được lưu!\nBạn có muốn lưu không?", "Nhân viên", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                if (result == System.Windows.Forms.DialogResult.Yes)
                {
                    dc.SubmitChanges();
                }
                else if (result == System.Windows.Forms.DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
            }
        }

        private void gvNhanVien_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {       
            saved = false;
            if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
            {
                this.Text = this.Text + "*";
            }
        }

        private void gvNhanVien_InvalidValueException(object sender, DevExpress.XtraEditors.Controls.InvalidValueExceptionEventArgs e)
        {
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.DisplayError;
            //XtraMessageBox.Show(e.ErrorText,"Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Error);
        }

        private void gvNhanVien_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            e.ExceptionMode = ExceptionMode.NoAction;
        }

        private void btDong_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }

        private void gvNhanVien_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Column == colSTT)
            {
                if (e.RowHandle >= 0)
                {
                    e.DisplayText = (e.RowHandle + 1).ToString();
                }
            }
        }

        private void gvNhanVien_DragObjectDrop(object sender, DevExpress.XtraGrid.Views.Base.DragObjectDropEventArgs e)
        {
            if (gvNhanVien.GroupCount > 0)
            {
                gvNhanVien.OptionsBehavior.Editable = false;
            }
            else
            {
                gvNhanVien.OptionsBehavior.Editable = true;
            }
        }

        private void gvNhanVien_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            //Mã số
            #region
            
            if (gvNhanVien.FocusedColumn == colNV_MS)
            {
                string NewValue = (string)e.Value;
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Mã số nhân viên không được để trống.";

                    }
                    else
                    {
                        NewValue = NewValue.Trim();
                        if (NewValue.Length > 10)
                        {
                            e.Valid = false;
                            e.ErrorText = "Mã số nhân viên có độ dài tối đa là 10 ký tự.";

                        }
                        else
                        {
                            for (int i = 0; i < gvNhanVien.RowCount; i++)
                            {
                                string OldValue = (string)gvNhanVien.GetRowCellValue(i, colNV_MS);
                                int[] rowHandle = gvNhanVien.GetSelectedRows();
                                if (OldValue.ToUpper().Trim() == NewValue.ToUpper() && i != rowHandle[0])
                                {
                                    e.Valid = false;
                                    e.ErrorText = "Mã số nhân viên này đã tồn tại.";

                                    break;
                                }
                            }
                        }
                    }
                }


            }
            #endregion

            //Tên nhân viên 
            #region
            
            if (gvNhanVien.FocusedColumn == colNV_Ten)
            {
                string NewValue = (string)e.Value;
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = gvNhanVien.FocusedColumn.Caption +" không được để trống.";
                    }
                }
            }
            #endregion
        }

        

        //ValidateRow chỉ nên dùng để bắt lỗi nhập rỗng khi thêm dòng mới
        private void gvNhanVien_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            try
            {
                //for (int i = 0; i < gvNhanVien.Columns.Count - 3; i++)
                //{
                //    string value = (string)gvNhanVien.GetRowCellValue(e.RowHandle, gvNhanVien.Columns[i]);
                //    if (value == null)
                //    {
                //        e.Valid = false;
                //        gvNhanVien.SetColumnError(gvNhanVien.Columns[i], gvNhanVien.Columns[i].Caption + " không được để trống.");
                //    }
                //}
                string MaSo = (string)gvNhanVien.GetRowCellValue(e.RowHandle, colNV_MS);
                if (MaSo == null)
                {
                    e.Valid = false;
                    gvNhanVien.SetColumnError(colNV_MS, "Mã số không được để trống.");
                }

                string Ten = (string)gvNhanVien.GetRowCellValue(e.RowHandle, colNV_Ten);
                if (MaSo == null)
                {
                    e.Valid = false;
                    gvNhanVien.SetColumnError(colNV_Ten, "Tên nhân viên không được để trống.");
                }

            }
            catch (Exception)
            {
                throw;
            }
        }       
    }
}
